package cn.iocoder.yudao.module.crossborder.inventory.service;

import cn.iocoder.yudao.module.crossborder.inventory.api.dto.InventoryDTO;
import cn.iocoder.yudao.module.crossborder.inventory.api.dto.WarehouseDTO;

import java.util.List;

/**
 * 库存管理 Service 接口
 *
 * @author LHL
 */
public interface InventoryService {

    /**
     * 获得库存记录
     *
     * @param id 编号
     * @return 库存记录
     */
    InventoryDTO getInventory(Long id);

    /**
     * 获得库存记录列表
     *
     * @param ids 编号列表
     * @return 库存记录列表
     */
    List<InventoryDTO> getInventoryList(List<Long> ids);

    /**
     * 创建库存记录
     *
     * @param inventory 库存记录
     * @return 编号
     */
    Long createInventory(InventoryDTO inventory);

    /**
     * 检查库存
     *
     * @param productId 商品编号
     * @param warehouseId 仓库编号
     * @param quantity 数量
     * @return 是否有足够库存
     */
    Boolean checkStock(Long productId, Long warehouseId, Integer quantity);

    /**
     * 预留库存
     *
     * @param productId 商品编号
     * @param warehouseId 仓库编号
     * @param quantity 数量
     * @return 是否成功
     */
    Boolean reserveStock(Long productId, Long warehouseId, Integer quantity);

    /**
     * 释放库存
     *
     * @param productId 商品编号
     * @param warehouseId 仓库编号
     * @param quantity 数量
     * @return 是否成功
     */
    Boolean releaseStock(Long productId, Long warehouseId, Integer quantity);

    /**
     * 获得仓库信息
     *
     * @param id 编号
     * @return 仓库信息
     */
    WarehouseDTO getWarehouse(Long id);

}
